perm filename POTCAL.SAI[SYS,HE] blob
sn#060099 filedate 1974-05-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "POTCAL" COMMENT POT CALIBRATION ROUTINE
C00005 00003 IF TOT<2 THEN CALL(0,"EXIT")
C00007 ENDMK
C⊗;
BEGIN "POTCAL" COMMENT POT CALIBRATION ROUTINE;
EXTERNAL PROCEDURE SPWON(INTEGER TICK; REFERENCE INTEGER LAB);
EXTERNAL PROCEDURE SPWOFF;
EXTERNAL PROCEDURE CALPOT;
EXTERNAL INTEGER STATUS, STATE, POT, SSERVO;
EXTERNAL REAL CREF, SREF, P1, P2, P3, P4, P5, P6, P7, P8;
REQUIRE "HELIB[1,3]" LIBRARY;
DEFINE DEG="180/3.14159", CR="'15&'12";
SAFE REAL ARRAY X, Y, DEV[1:100];
INTEGER TOT, I, J, CAMERA, NUMB;
REAL A, B;
SETFORMAT(0,8);
OUTSTR("POT: 1-C FOCUS, 2-C TILT, 3-C PAN, 4-S FOCUS, 5-S ZOOM, 6-S TILT"&
CR&"7-S PAN : ");
NUMB ← CVD(INCHWL);
CAMERA ← NUMB>3;
TOT ← 0;
WHILE TRUE DO
BEGIN "GETLOP"
STRING STR;
OUTSTR("VALUE=");
STR ← INCHWL;
IF ¬LENGTH(STR) THEN DONE;
TOT ← TOT+1;
X[TOT] ← REALSCAN(STR,I)*(CASE NUMB-1 OF (1,DEG,DEG,1,1,DEG,DEG));
STATE ← STATUS ← 0;
DO BEGIN "READ"
IF CAMERA THEN
BEGIN "SIERRA"
STATE ← 0;
POT ← -1;
SPWON(0,SSERVO);
WHILE ¬STATE DO;
SPWOFF;
IF ¬(STATE LAND '1) THEN STATE ← 0 ELSE
OUTSTR(CVOS(STATE));
END "SIERRA" ELSE BEGIN "COHU"
CALPOT;
IF ¬(STATUS LAND '100077) THEN STATUS←0 ELSE
OUTSTR(CVOS(STATUS));
END "COHU";
IF STATUS∨STATE THEN OUTSTR("-ERR"&CR);
END "READ" UNTIL ¬STATE∧¬STATUS;
Y[TOT] ← (CASE NUMB-1 OF (P1,P2,P3,P6,P7,P5,P4))*(IF CAMERA
THEN SREF ELSE CREF);
END "GETLOP";
IF TOT<2 THEN CALL(0,"EXIT");
IF TOT=2 THEN
BEGIN "SOLVE"
A ← (X[2]-X[1])/(Y[2]-Y[1]);
B ← X[1]-A*Y[1];
END "SOLVE" ELSE BEGIN "LEAST"
REAL SXY, SX, SY, SYQ;
SXY ← SX ← SY ← SYQ ← 0;
FOR I←1 STEP 1 UNTIL TOT DO
BEGIN "SUM"
SX ← SX+X[I];
SY ← SY+Y[I];
SXY ← SXY+X[I]*Y[I];
SYQ ← SYQ+Y[I]↑2;
END "SUM";
A ← (SXY-SX*SY)/(SYQ-SY↑2);
B ← SX-A*SY;
END "LEAST";
FOR I ← 1 STEP 1 UNTIL TOT DO DEV[I] ← A*Y[I]+B-X[I];
OUTSTR("EQUATION IS "&CVF(A)&"*POT + "&CVF(B)&" = VALUE"&CR);
OUTSTR(CR&"POT VALUE DEVIATION"&CR);
FOR I←1 STEP 1 UNTIL TOT DO OUTSTR(CVF(Y[I])&" "&CVF(X[I])&" "&
CVF(DEV[I])&CR);
INCHWL;
END "POTCAL";